package cn.edu.xjtu.work.moveZeroes;

import java.util.Arrays;

/**
 * 移动零
 * 
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 */
public class Solution {
  public static void main(String[] args) {
    int[] nums = new int[] { 4, 2, 4, 0, 0, 3, 0, 5, 1, 0 };
    moveZeroes1(nums);
    System.out.println(Arrays.toString(nums));
  }

  /**
   * 将所有非0元素全部往前挪,在处理完后,将剩余元素全部置为0
   * 
   * @param nums
   */
  public static void moveZeroes(int[] nums) {
    if (nums == null || nums.length == 0) {
      return;
    }
    int index = 0;
    for (int i = 0; i < nums.length; i++) {
      if (nums[i] != 0) {
        nums[index++] = nums[i];
      }
    }
    while (index < nums.length) {
      nums[index++] = 0;
    }
  }

  /**
   * 双指针
   * 
   * @param nums
   */
  public static void moveZeroes1(int[] nums) {
    int i = 0;// 统计前面0的个数
    for (int j = 0; j < nums.length; j++) {
      if (nums[j] == 0) {// 如果当前数字是0就不操作
        i++;
      } else if (i != 0) {
        // 否则，把当前数字放到最前面那个0的位置，然后再把当前位置设为0
        nums[j - i] = nums[j];
        nums[j] = 0;
      }
    }
  }
}
